_FPRESET

            
#include <float.h>
void _fpreset();             переинициализирует математический пакет с плавающей точкой.

Описание:
Функция _fpreset переинициализирует математический пакет сплавающей точкой. Эта функция обычно используется с процедурами signal , system или с семейством процедур exec , spawn.
Если программа вместе с функцией signal захватывает сигналы ошибок с плавающей точкой (SIGFPE ), то она при вызове _fpreset благополучно восстанавливается из ошибок с плавающей точкой и выполняет longjmp.

Замечание!
В версиях MS DOS , более ранних чем 4.0, child -процесс, выполнимый в exec, spawn или system , может воздействовать на состояние с плавающей точкой parent-процесса, если используется 8087 или 80287 сопроцессор. Поэтому, если используется сопроцессор 8087 либо 80287 , рекомендуются помнить, что:
* exec, spawn, system не могут вызываться в процессе вычисления выражения с плавающей точкой;
* _fpreset должна быть вызвана после этих процедур, если child -процесс может выполнить требуемую операцию.

Пример.

            
               #include <stdio.h>
               #include <signal.h>
               #include <setjmp.h>
               #include <float.h>
            
               int fphandler ();
               jmp_buf mark;
               double a = 1.0, b = 0.0, c;
            
               main()
               {
               if(signal(SIGFPE, fphandler)==(int(*)())-1)
                   abort();
               if(setjmp(mark)==0)  {
                   c = a/b;
                   printf("Should never get here\n");
                   }
               printf("Recovered from floating-point error\n");
               }
            
               int fphandler(sig,num)
               int sig,num;
            
               {
               printf("signal=%d subcode =%d\n",sig,num);
               _fpreset();
               /* переинициализирует пакет с плавающей точкой */
               longjmp(mark,-1);
               }

Hosted by uCoz